From 7bb0c1fc4663e323e32df2dd8a413971b58f375c Mon Sep 17 00:00:00 2001 From: robertl Date: Thu, 8 Jan 2004 02:52:34 +0000 Subject: [PATCH] Add flags to vm_alloc to zero allocated buffer. --- gpsbabel/defs.h | 6 +++++- gpsbabel/gpx.c | 7 +++++-- gpsbabel/vmem.c | 10 ++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gpsbabel/defs.h b/gpsbabel/defs.h index dc344205d..b74a8a70a 100644 --- a/gpsbabel/defs.h +++ b/gpsbabel/defs.h @@ -246,11 +246,15 @@ void setshort_mustupper(void *, int n); void setshort_mustuniq(void *, int n); void setshort_whitespace_ok(void *, int n); +/* + * Vmem flags values. + */ +#define VMFL_NOZERO (1 << 0) typedef struct vmem { void *mem; /* visible memory object */ size_t size; /* allocated size of object */ } vmem_t; -vmem_t vmem_alloc(size_t); +vmem_t vmem_alloc(size_t, int flags); void vmem_free(vmem_t*); void vmem_realloc(vmem_t*, size_t); diff --git a/gpsbabel/gpx.c b/gpsbabel/gpx.c index 2c3f9ad1d..95c3be0e7 100644 --- a/gpsbabel/gpx.c +++ b/gpsbabel/gpx.c @@ -684,13 +684,16 @@ gpx_rd_init(const char *fname) file_time = 0; - current_tag = vmem_alloc(1); + current_tag = vmem_alloc(1, 0); + *((char *)current_tag.mem) = '\0'; psr = XML_ParserCreate(NULL); if (!psr) { fatal(MYNAME ": Cannot create XML Parser\n"); } - cdatastr = vmem_alloc(1); + cdatastr = vmem_alloc(1, 0); + *((char *)cdatastr.mem) = '\0'; + XML_SetElementHandler(psr, gpx_start, gpx_end); XML_SetCharacterDataHandler(psr, gpx_cdata); } diff --git a/gpsbabel/vmem.c b/gpsbabel/vmem.c index bef4d970d..b5dbde2cf 100644 --- a/gpsbabel/vmem.c +++ b/gpsbabel/vmem.c @@ -24,10 +24,16 @@ #include vmem_t -vmem_alloc(size_t size) +vmem_alloc(size_t size, int flags) { vmem_t vm; - vm.mem = xmalloc(size); + /* + * By default, zero the allocated thingy. + */ + if (flags & VMFL_NOZERO) + vm.mem = xmalloc(size); + else + vm.mem = xcalloc(size, 1); vm.size = size; return vm; } -- 2.30.2